//本js可以在chrome浏览器导出的书签（html文件）中检查是否有[url完全相同]的重复书签，并加以提示。
var bookmarkArr=[];         //所有书签
var bookmarkUrlArr=[];      //书签中所有的url
var bookmarkUrlArrSort=[];  //将书签url排序
var duplicatebookmarkArr=[];   //存储重复的书签
var duplicatebookmarkIndexArr=[];  //存储重复书签的索引信息
if(document.getElementsByTagName("dl")[1].childNodes[0].nodeName==="P"){    //先删除一个不需要的元素(就是一个空的p标签)
    document.getElementsByTagName("dl")[1].removeChild(document.getElementsByTagName("dl")[1].childNodes[0]); 
}
var allBlock=document.getElementsByTagName("dl")[1].childNodes; //获取书签栏中的所有区块（按文件夹) 。这里实际上获取到的是root中所有的[直接子dt标签]
var blockLength=allBlock.length;        //区块的数量

//查找指定书签所在文件夹的名字
function getDirName (e) {
    if(e.parentNode.firstChild.nodeName==="H3"){
        fullDirName=e.parentNode.firstChild.innerHTML+"\\"+fullDirName;
        if(e.parentNode.firstChild.innerHTML!=="书签栏"){
            return getDirName(e.parentNode);
        }else{
            return fullDirName;
        }
    }else{
      return getDirName(e.parentNode);
    }
}
    
//存储所有书签和书签中所有的url
for(var i=0;i<allBlock.length;i++){
    var nowList=allBlock[i].getElementsByTagName("a");  //获取当前区块所有书签条目（这是最细的层级了
    var nowBookmarkLength=nowList.length;   //当前区块里书签的数量
    for(var ii=0;ii<nowBookmarkLength;ii++){
        var fullDirName="";
        bookmarkArr.push({
            "url":nowList[ii].href,     //保存当前书签的url
            "title":nowList[ii].innerHTML,
            "dir":getDirName(nowList[ii]),
            "x":i,                      //保存索引1，即该书签在第几个区块上
//            "y":ii                      //保存索引2，即该书签在该区块上的索引
        });
        bookmarkUrlArr.push(nowList[ii].href);
    }
}

//查找重复项并将其储存到[重复书签]的数组中
var bookmarkUrlArr2=[];     //由于sort直接将排序后的结果保存到原数组，因此我们需要创建一个副本来进行排序操作
for(var i=0;i<bookmarkUrlArr.length;i++){
    bookmarkUrlArr2[i]=bookmarkUrlArr[i];
}
bookmarkUrlArrSort=bookmarkUrlArr2.sort();
for(var i=0;i<bookmarkUrlArrSort.length;i++){
    if(bookmarkUrlArrSort[i]===bookmarkUrlArrSort[i+1]){    //将[url完全相同]的书签视为重复书签。注意，如果某个url完全相同的书签出现多次，那么下面的操作会执行[出现次数-1]次，这样将会导致[重复书签]中该书签被记录多次
        duplicatebookmarkArr.push(bookmarkUrlArrSort[i]);
    }
}

if(duplicatebookmarkArr.length===0){
    alert("检查完毕，您的书签没有重复的项目~");
}else{
    //删掉[重复书签]数组中的可能出现的重复项
    duplicatebookmarkArr.sort();
    for(var i=0;i<duplicatebookmarkArr.length;i++){
        if(duplicatebookmarkArr[i]===duplicatebookmarkArr[i+1]){
            duplicatebookmarkArr.splice(i,1);
        }
    }

    //存储重复书签的索引信息，包含重复项的url和它每次出现的的位置
    for(var i=0;i<duplicatebookmarkArr.length;i++){
        duplicatebookmarkIndexArr.push({
            "url":duplicatebookmarkArr[i],
            "index":[]
        });
        for(var ii=0;ii<bookmarkUrlArr.length;ii++){
            if(duplicatebookmarkArr[i]===bookmarkUrlArr[ii]){
                duplicatebookmarkIndexArr[i].index.push(ii);
            }
        }
    }

    //输出结果到新窗口
    var newWindow=window.open();
    console.log("<h2>"+"检查完毕，有"+duplicatebookmarkArr.length+"个URL含有重复的书签。"+"</h2>");
    for(var i=0;i<duplicatebookmarkArr.length;i++){
        console.log("<h3>URL-"+(i+1)+"："+"<input type='text' value="+duplicatebookmarkArr[i]+" style='width:80%;border:#ddd 1px solid' onmouseover='this.select()' />"+"</h3>");
        for(var ii=0;ii<duplicatebookmarkIndexArr[i].index.length;ii++){
            console.log("标题："+bookmarkArr[duplicatebookmarkIndexArr[i].index[ii]].title+"</br>");
            console.log("位于："+bookmarkArr[duplicatebookmarkIndexArr[i].index[ii]].dir+"</br>");
        }
        console.log("<hr/>");
    }
    newWindow.document.body.style.cssText="font-family:'Microsoft Yahei';font-size:14px;";
}